<?php
namespace app\admin\model;

class UserModel extends BaseModel
{
    // 确定链接表名
    protected $name = 'user';

    /**
     * 根据搜索条件获取用户列表信息
     * @param $where
     * @param $offset
     * @param $limit
     */
    public function getUsersByWhere($where=[],$whereOr=[],$offset,$limit){
		return $this->alias('user')
			->join('role role', 'user.role_id = ' . 'role.id')
			->join('department depart', 'user.depart_id = ' . 'depart.id')
			->field( 'user.*,role.role_name,depart.name as depart_name')
			->where($where)
			->where($this->dataAuth('user.id'))
			->where(function($query)use($whereOr){
				foreach($whereOr as $k => $v){
					$query->whereOr($k,"like","%".$v."%");
				}
			})->limit($offset, $limit)->order('id desc')->select();
    }

    /**
     * 根据搜索条件获取所有的用户数量
     * @param $where
     */
    public function getAllUsers($where,$whereOr)
    {
        return $this->alias('user')
		->join('role rol', 'user.role_id = ' . 'rol.id')
		->join('department depart', 'user.depart_id = ' . 'depart.id')
		->where($this->dataAuth('user.id'))
		->where($where)->where(function($query)use($whereOr){
			foreach($whereOr as $k => $v){
				$query->whereOr($k,"like","%".$v."%");
			}
		})->count();
    }

    /**
     * 插入管理员信息
     * @param $param
     */
	 public function insertUser($param){
		$this::startTrans();
		try{
			$this->validate('UserValidate')->allowField(true)->save($param);
			# 重新写入所有角色的可视权限
			$this::commit();
			return msg(1, url('user/index'), '添加用户成功');
		}catch(\Exception $e){
			$this::rollback();
			return msg(-2, '', $e->getMessage());
		}
     }

    /**
     * 编辑管理员信息
     * @param $param
     */
    public function editUser($param){
        try{
            $result =  $this->validate('UserValidate')->save($param, ['id' => $param['id']]);
            if(false === $result){
                // 验证失败 输出错误信息
                return msg(-1, '', $this->getError());
            }else{
                return msg(1, url('user/index'), '编辑用户成功');
            }
        }catch(PDOException $e){
            return msg(-2, '', $e->getMessage());
        }
    }

    /**
     * 根据管理员id获取角色信息
     * @param $id
     */
    public function getOneUser($id){
        return $this->where('id', $id)->find();
    }

    /**
     * 删除管理员
     * @param $id
     */
    public function delUser($id){
        try{
            $this->where('id', $id)->delete();
            return msg(1, '', '删除管理员成功');
        }catch( PDOException $e){
            return msg(-1, '', $e->getMessage());
        }
    }

    /**
     * 根据用户名获取管理员信息
     * @param $name
     */
    public function findUserByName($name){
        return $this->where('user_name', $name)->find();
    }

    /**
     * 更新管理员状态
     * @param array $param
     */
    public function updateStatus($param = [], $uid){
        try{
            $this->where('id', $uid)->update($param);
            return msg(1, '', '保存成功');
        }catch (\Exception $e){
            return msg(-1, '', $e->getMessage());
        }
    }
}
